{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def search_converge(loss_curve, ftol=-1, frtol=5e-3, max_count=1000, max_window=1000):\n",
    "    \"\"\"\n",
    "    ftol: Searching is terminated if the loss decrease is less than ftol, -1 means ignored\n",
    "    frtol: Searching is terminated if the relative loss decrease is less than frtol, -1 means ignored\n",
    "    max_count: If ftol or frtol is reach, tolerate it until `max_count` is reached\n",
    "    max_window: The searching window to detect a loss decrease.\n",
    "        Searching is terminated if a decrease does not happen within the searching window \n",
    "    \"\"\"\n",
    "    loss_curve=np.array(loss_curve)\n",
    "    assert loss_curve.ndim == 1\n",
    "    def check(best,now,counter):\n",
    "        info=0\n",
    "        if frtol>0:\n",
    "            if now<=best*(1-frtol):\n",
    "                counter=0\n",
    "            else:\n",
    "                counter+=1\n",
    "                if counter >= max_count:\n",
    "                    info=1\n",
    "        if ftol>0:\n",
    "            if best-now< ftol:\n",
    "                counter=0\n",
    "            else:\n",
    "                counter+=1\n",
    "                if counter >= max_count:\n",
    "                    info=1\n",
    "        return info, counter\n",
    "\n",
    "    # initialize\n",
    "    counter=0\n",
    "    accepte=0\n",
    "    info=0\n",
    "    for i, now in enumerate(loss_curve):\n",
    "        if i==0:\n",
    "            best=now\n",
    "            best_i=i\n",
    "            accepte=1\n",
    "        else:\n",
    "            if now < best:\n",
    "                info, counter = check(best, now, counter)\n",
    "                if counter==0:\n",
    "                    best=now\n",
    "                    best_i=i\n",
    "                accepte=1\n",
    "            else:\n",
    "                accepte-=1\n",
    "\n",
    "        if accepte < -max_window:\n",
    "            info=1\n",
    "        if info==1:\n",
    "            return best_i             \n",
    "    return best_i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.009102535247802735\n",
      "18859\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1522250c370>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./2D-Pl/epoch_time-2D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./2D-Pl/WAN-2D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.008769116401672362\n",
      "4093\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x198222c2910>]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./2D/epoch_time-2D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./2D/WAN-2D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.007712857723236084\n",
      "6427\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x28d5ba20d60>]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./3D/epoch_time-3D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./3D/WAN-3D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.009006984233856201\n",
      "12025\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x28d5ba65d90>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./5D/epoch_time-5D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./5D/WAN-5D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.011423549652099609\n",
      "12555\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x28d5b8de520>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./10D/epoch_time-10D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./10D/WAN-10D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.01945061445236206\n",
      "14595\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x28d5cdfa100>]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./20D/epoch_time-20D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./20D/WAN-20D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.029625027179718016\n",
      "14637\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x28d5cd5cdf0>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./40D/epoch_time-40D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./40D/WAN-40D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.05458065986633301\n",
      "14831\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x28d5ce90430>]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./80D/epoch_time-80D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./80D/WAN-80D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the time of one epoch : 0.08480535507202148\n",
      "13585\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x28d5e0b4fa0>]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# time of one epoch\n",
    "data = np.loadtxt(fname='./120D/epoch_time-120D.csv', delimiter=',', skiprows=1)\n",
    "print(f'the time of one epoch : {np.mean(data[-100:])}')\n",
    "data = np.loadtxt(fname='./120D/WAN-120D-loss_history.csv', delimiter=',', skiprows=1)\n",
    "\n",
    "converge = search_converge(data[:,1], max_count=5000, max_window=5000)\n",
    "print(converge)\n",
    "\n",
    "x = np.arange(0, len(data))\n",
    "y = data[:,1]\n",
    "\n",
    "plt.yscale('log')\n",
    "plt.plot(x, y)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
